/// <reference types="node" />
/// <reference types="vite/client" />
import path from 'path';
import {defineConfig} from "vite";
import vue from '@vitejs/plugin-vue';
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite';
import { ArcoResolver } from 'unplugin-vue-components/resolvers';
import { vitePluginForArco } from '@arco-plugins/vite-vue'
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
import {svgIconNamesPlugin} from "./plugin/svg-icon-names";

const host = process.env.TAURI_DEV_HOST;
// https://vitejs.dev/config/
export default defineConfig({
    resolve: {
        alias: {
            "@": path.resolve(__dirname, "src"),
        },
    },
    plugins: [
        vue(),
        Components({
            resolvers: [
                ArcoResolver({
                    // sideEffect: true 会导入样式，但 vitePluginForArco 会处理按需导入样式
                    // 如果不需要自动导入样式，可以设置为 false
                    sideEffect: false
                })
            ],
            dts: path.resolve("./", "components.d.ts"),
        }),
        AutoImport({
            imports: ["vue", "vue-router"],
            resolvers: [
                ArcoResolver(),
            ],
            dts: path.resolve("./", "auto-imports.d.ts"),
        }),

        // 使用svg图标
        createSvgIconsPlugin({
            iconDirs: [path.resolve(process.cwd(), "src/assets/svg/system"),path.resolve(process.cwd(), "src/assets/svg/app")],
            symbolId: "[name]",
            svgoOptions: true,
            inject: "body-last"
        }),
        // 自定义生成svg图标名称
        svgIconNamesPlugin("src/assets/svg/app"),

        vitePluginForArco({
            style: 'css'
        })
    ],

    css: {
        preprocessorOptions: {
            less: {
                modifyVars: {
                    'message-z-index': '10000'
                },
                javascriptEnabled: true
            }
        }
    },

    // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
    //
    // 1. prevent vite from obscuring rust errors
    clearScreen: false,
    // 2. tauri expects a fixed port, fail if that port is not available
    server: {
        port: 1420,
        strictPort: true,
        host: host || false,
        hmr: host
            ? {
                protocol: "ws",
                host,
                port: 1421,
            }
            : undefined,
        watch: {
            // 3. tell vite to ignore watching `src-tauri`
            ignored: ["**/src-tauri/**"],
        },
        proxy: {
            '/api': {
                target: 'http://172.27.150.19:8000',
                changeOrigin: true,
                // rewrite: (path) => path.replace(/^\/api/, '')
            }
        }
    },
    
    // 添加构建优化配置
    build: {
        // 启用压缩（Vite默认会在生产构建时启用）
        minify: 'esbuild', // 或者 'terser' 如果你需要更高级的压缩选项
        rollupOptions: {
            output: {
                // 使用函数进行更精细的代码分割控制
                manualChunks(id) {
                    // node_modules 中的依赖
                    if (id.includes('node_modules')) {
                        // echarts 单独打包（可能较大，但已是最小化）
                        // 如果 echarts chunk 仍然超过 500KB，可以考虑：
                        // 1. 使用动态导入：const echarts = await import('echarts')
                        // 2. 按需导入：import * as echarts from 'echarts/core' + 特定图表类型
                        if (id.includes('echarts')) {
                            return 'echarts';
                        }
                        // arco-design 单独打包
                        if (id.includes('@arco-design/web-vue')) {
                            return 'arco-design';
                        }
                        // Vue 生态（包含 Vue 核心和 Vue 相关库）
                        // 注意：Vue 核心库通常很小，合并到 vue-ecosystem 中更合理
                        if (id.includes('vue-router') || id.includes('pinia') || 
                            (id.includes('node_modules/vue') && !id.includes('vue-router') && !id.includes('vue-tsc'))) {
                            return 'vue-ecosystem';
                        }
                        // Tauri 相关
                        if (id.includes('@tauri-apps')) {
                            return 'tauri';
                        }
                        // 其他 node_modules 中的依赖
                        // 将其他依赖按包名分组，避免单个 chunk 过大
                        const match = id.match(/node_modules[\/\\]([^\/\\]+)/);
                        if (match) {
                            const packageName = match[1];
                            // 对于较大的工具库，单独打包
                            if (['unplugin', 'vite-plugin'].some(prefix => packageName.startsWith(prefix))) {
                                return 'vite-plugins';
                            }
                        }
                        // 其他小依赖合并到 vendor
                        return 'vendor';
                    }
                }
            }
        },
        // chunk 大小警告阈值（单位：KB）
        // 建议值：
        // - 1000KB (1MB): 适合使用 echarts、arco-design 等大型库的项目
        // - 500KB: Vite 默认值，适合小型项目
        // - 2000KB: 仅在确实需要时使用，过大会隐藏性能问题
        // 当前项目已做代码分割，单个 chunk 应控制在 500-800KB 以内
        chunkSizeWarningLimit: 500
    }
});